import { ipcMain, shell, app, dialog } from 'electron'

/**
 * 系统相关IPC处理
 */
export function setupSystemIpc(): void {
  /**
   * 使用系统默认程序打开文件
   */
  ipcMain.handle('system:openFile', async (_, { filePath }) => {
    try {
      await shell.openPath(filePath)
      return {
        success: true
      }
    } catch (error) {
      console.error('打开文件失败:', error)
      return {
        success: false,
        error: '打开文件失败'
      }
    }
  })

  /**
   * 在文件夹中显示文件
   */
  ipcMain.handle('system:showInFolder', async (_, { filePath }) => {
    try {
      shell.showItemInFolder(filePath)
      return {
        success: true
      }
    } catch (error) {
      console.error('在文件夹中显示文件失败:', error)
      return {
        success: false,
        error: '在文件夹中显示文件失败'
      }
    }
  })

  /**
   * 获取应用版本
   */
  ipcMain.handle('system:getAppVersion', () => {
    try {
      return {
        success: true,
        data: app.getVersion()
      }
    } catch (error) {
      console.error('获取应用版本失败:', error)
      return {
        success: false,
        error: '获取应用版本失败'
      }
    }
  })

  /**
   * 检查更新（占位符）
   */
  ipcMain.handle('system:checkForUpdates', () => {
    try {
      // 这里可以集成electron-updater
      return {
        success: true,
        data: {
          available: false,
          version: app.getVersion(),
          message: '当前已是最新版本'
        }
      }
    } catch (error) {
      console.error('检查更新失败:', error)
      return {
        success: false,
        error: '检查更新失败'
      }
    }
  })

  /**
   * 选择文件夹
   */
  ipcMain.handle('system:selectFolder', async () => {
    try {
      const result = await dialog.showOpenDialog({
        properties: ['openDirectory'],
        title: '选择照片文件夹'
      })
      
      if (result.canceled) {
        return {
          success: false,
          error: '用户取消选择'
        }
      }
      
      return {
        success: true,
        data: result.filePaths[0]
      }
    } catch (error) {
      console.error('选择文件夹失败:', error)
      return {
        success: false,
        error: '选择文件夹失败'
      }
    }
  })

  /**
   * 选择文件
   */
  ipcMain.handle('system:selectFile', async (_, { filters = [], multiple = false }) => {
    try {
      const result = await dialog.showOpenDialog({
        properties: multiple ? ['openFile', 'multiSelections'] : ['openFile'],
        filters: filters.length > 0 ? filters : [
          { name: '图片文件', extensions: ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'heic', 'heif', 'tiff', 'raw'] }
        ],
        title: multiple ? '选择照片文件' : '选择照片文件'
      })
      
      if (result.canceled) {
        return {
          success: false,
          error: '用户取消选择'
        }
      }
      
      return {
        success: true,
        data: multiple ? result.filePaths : result.filePaths[0]
      }
    } catch (error) {
      console.error('选择文件失败:', error)
      return {
        success: false,
        error: '选择文件失败'
      }
    }
  })

  /**
   * 获取用户数据目录
   */
  ipcMain.handle('system:getUserDataPath', () => {
    try {
      return {
        success: true,
        data: app.getPath('userData')
      }
    } catch (error) {
      console.error('获取用户数据目录失败:', error)
      return {
        success: false,
        error: '获取用户数据目录失败'
      }
    }
  })

  /**
   * 获取临时目录
   */
  ipcMain.handle('system:getTempPath', () => {
    try {
      return {
        success: true,
        data: app.getPath('temp')
      }
    } catch (error) {
      console.error('获取临时目录失败:', error)
      return {
        success: false,
        error: '获取临时目录失败'
      }
    }
  })

  /**
   * 获取文档目录
   */
  ipcMain.handle('system:getDocumentsPath', () => {
    try {
      return {
        success: true,
        data: app.getPath('documents')
      }
    } catch (error) {
      console.error('获取文档目录失败:', error)
      return {
        success: false,
        error: '获取文档目录失败'
      }
    }
  })

  /**
   * 获取图片目录
   */
  ipcMain.handle('system:getPicturesPath', () => {
    try {
      return {
        success: true,
        data: app.getPath('pictures')
      }
    } catch (error) {
      console.error('获取图片目录失败:', error)
      return {
        success: false,
        error: '获取图片目录失败'
      }
    }
  })

  /**
   * 显示消息框
   */
  ipcMain.handle('system:showMessageBox', async (_, { type = 'info', title, message, buttons = ['确定'] }) => {
    try {
      const result = await dialog.showMessageBox({
        type,
        title,
        message,
        buttons,
        defaultId: 0
      })
      
      return {
        success: true,
        data: {
          response: result.response,
          checkboxChecked: result.checkboxChecked
        }
      }
    } catch (error) {
      console.error('显示消息框失败:', error)
      return {
        success: false,
        error: '显示消息框失败'
      }
    }
  })
}